void DataComandMenu( short cd, short *Nos, array< String^ >^ *Data )
    {
        short i = 0;
        if ( cd < 0 || cd >= ConstMenuMax1 )
        {
            *Nos = i;
            return;
        }
        for ( i = 0; i < ConstMenuMax2; i++ )
        {
            if ( wcslen( ConstComandMenu[ cd ][ i ] ) <= 0 ) break;
            ( *Data )->Resize( ( *Data ), i + 1 );
            ( *Data )[ i ] = chgmojidata1( ConstComandMenu[ cd ][ i ] );
        }
        *Nos = i;
    }

    void DataComandMenu1( short cd, short *Nos, array< String^ >^ *Data, array< String^ >^ *Data1 )
    {
        short i = 0;
        if ( cd < 0 || cd >= ConstMenu1Max1 )
        {
            *Nos = i;
            return;
        }
        for ( i = 0; i < ConstMenu1Max2; i++ )
        {
            if ( wcslen( ConstComandMenu1[ cd ][ i ][ 0 ] ) <= 0 ) break;
            ( *Data )->Resize( ( *Data ), i + 1 );
            ( *Data )[ i ] = chgmojidata1( ConstComandMenu1[ cd ][ i ][ 0 ] );
            ( *Data1 )->Resize( ( *Data1 ), i + 1 );
            ( *Data1 )[ i ] = chgmojidata1( ConstComandMenu1[ cd ][ i ][ 1 ] );
        }
        *Nos = i;
    }

    void MenuModeSelect( short code, int CmdCode, String^ CmdName )
    {
        int CmdCode1;
        String^ CmdName1;
         short MenuMax;
         array< String^ >^ MenuItems;
         array< String^ >^ MenuItems1;
         short cd;
         short fomat;
         cd = CmdCode;
        Trace::WriteLineIf( debugflg, "( MenuModeSelect : 1 ) Main Mode = " + code + " Suub Mode = " + cd + " Comaannd Name = " + CmdName + "の処理をする。" );
         switch ( code )
         {
             case 0:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        if ( DataCheck3( ) < 0 ) break;
                        mode = 1;
                        cd = 1;
                        goto MainCase1;
                        break;
                    case 2:
                        //DrawDataInit5( );
                        //mode = 12;
                         MenuItems->Resize( MenuItems, 0 );
                         MenuItems1->Resize( MenuItems1, 0 );
                         DataComandMenu1( 0, &MenuMax, &MenuItems, &MenuItems1 );
                         commandform1( 0100100, MenuMax, MenuItems, MenuItems1, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase12;
                        break;
                    case 3:
                        mode = 0;
                        break;
                    case 4:
                        break;
                    default:
                        break;
                }
                 break;
MainCase1:     case 1:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        if ( statas > 0 ) break;
                        DrawDataFree( );
                        DrawDataInit( );
                        DrawDataInit1( );
                        if ( NewPaper( ) < 0 ) break;
                        if ( TitleSet( ) < 0 ) break;
                        if ( RevSet( ) < 0 ) break;
                        if ( SegmentModeSet( ) < 0 ) break;
                        if ( statas >= 5 ) { mode = 2break; }
                        if ( SegTypeSet( ) < 0 ) break;
                        mode = 2;
                        break;
                    case 2:
                        if ( statas < 1 ) break;
                        if ( TitleSet( ) < 0 ) break;
                        break;
                    case 3:
                        if ( statas < 2 ) break;
                        if ( RevSet( ) < 0 ) break;
                        break;
                    case 4:
                        if ( statas < 3 ) break;
                        if ( SegmentModeSet( ) < 0 ) break;
                        break;
                    case 5:
                        if ( statas < 4 ) break;
                        SegTypeSet( );
                        statas = 5;
                        mode = 2;
                        break;
                    case 6:
                        if ( DataCheck( ) < 0 ) break;
                        InitPicture( );
                        statas = 0;
                        mode = 0;
                        break;
                    default:
                        break;
                }
                 break;
             case 2:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        mode = 3;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase3;
                        break;
                    case 2:
                        mode = 4;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase4;
                        break;
                    case 3:
                        mode = 5;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase5;
                        break;
                    case 4:
                        Trace::WriteLineIf( debugflg, "( menuMode2 : 6 - 1 ) cd = " + cd + " " + CmdName + "の処理をする。" );
                        mode = 6;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase6; // 図形配置の各処理へ
                        break;
                    case 5:
                        mode = 7;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase7;
                        break;
                    case 6:
                        mode = 9;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase9;
                        break;
                    case 7:
                        mode = 10;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase10;
                        break;
                    case 8:
                        mode = 11;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase11;
                        break;
                    case 9:
                        mode = 0;
                        break;
                    default:
                        break;
                }
                 break;
MainCase3:     case 3:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        //mode = 12;
                         MenuItems->Resize( MenuItems, 0 );
                         MenuItems1->Resize( MenuItems1, 0 );
                         DataComandMenu1( 0, &MenuMax, &MenuItems, &MenuItems1 );
                         commandform1( 0100100, MenuMax, MenuItems, MenuItems1, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase12;
                        break;
                    case 2:
                        //mode = 12;
                         MenuItems->Resize( MenuItems, 0 );
                         MenuItems1->Resize( MenuItems1, 0 );
                         DataComandMenu1( 0, &MenuMax, &MenuItems, &MenuItems1 );
                         commandform1( 0100100, MenuMax, MenuItems, MenuItems1, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1 + 10;
                         goto MainCase12;
                        break;
                    case 3:
                        mode = 2;
                        break;
                    case 4:
                        break;
                    default:
                        break;
                }
                 break;
MainCase4:     case 4:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        if ( NewPaper( ) < 0 ) return;
                        break;
                    case 2:
                        TitleSet( );
                        break;
                    case 3:
                        RevSet( );
                        break;
                    case 4:
                        mode = 2;
                        break;
                    case 5:
                        break;
                    default:
                        break;
                }
                 break;
MainCase5:     case 5:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        SegmentModeSet( );
                        break;
                    case 2:
                        SegTypeSet( );
                        break;
                    case 3:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase6:     case 6:                 // 図形配置の各処理
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        SegmentDraw1( );    // "一般図形",
                        break;
                    case 2:
                        SegmentDraw2( );    // "多点図形"
                        break;
                    case 3:
                        StringDraw( );        // "文 字 列"
                        break;
                    case 4:                    // "特殊図形" menu code = 8 で再選択 case 14: へ
                        mode = 8;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase14; // 特殊図形の各処理へ
                        break;
                    case 5:                    // 戻る
                        mode = 2;
                        break;
                    case 6:
                        break;
                    default:
                        break;
                }
                 break;
MainCase7:     case 7:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        DataEditSeg2( );
                        break;
                    case 2:
                        DataEditSeg1( );
                        //SegNumberDump( );
                        break;
                    case 3:
                        mode = 2;
                        break;
                    case 4:
                        break;
                    case 5:
                        break;
                    default:
                        break;
                }
                 break;
             case 8:
                switch ( cd )
                {
                    case 0:
                        mode = 2;
                        break;
                    case 1:
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        break;
                    case 6:
                        break;
                    case 7:
                        break;
                    case 8:
                        break;
                    case 9:
                        break;
                    case 10:
                        break;
                    default:
                        break;
                }
                 break;
MainCase9:    case 9:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        UserMainPrg( );
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase10:     case 10:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        mode = 12;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase15; // 特殊図形の各処理へ
                        break;
                    case 2:
                        FolderSet( os );
                        break;
                    case 3:
                        FontSet( os );
                        break;
                    case 4:
                        ColorSet( os );
                        break;
                    case 5:
                        ZoomSet( os );
                        break;
                    case 6:
                        mode = 13;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase16; // 特殊図形の各処理へ
                        break;
                    case 7:
                        mode = 14;
                         MenuItems->Resize( MenuItems, 0 );
                         DataComandMenu( mode, &MenuMax, &MenuItems );
                         commandform( 0100100, MenuMax, MenuItems, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase17; // ユーザ処理へ
                        break;
                    case 8:
                        DateSet( os );
                        break;
                    case 9:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase11:     case 11:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        mode = 13;
                         MenuItems->Resize( MenuItems, 0 );
                         MenuItems1->Resize( MenuItems1, 0 );
                         DataComandMenu1( 1, &MenuMax, &MenuItems, &MenuItems1 );
                         commandform1( 0100100, MenuMax, MenuItems, MenuItems1, &CmdCode1, &CmdName1 );
                         Trace::WriteLineIf( debugflg, " CommandRead ( 1 ) mode = " + mode + " CmdCode = " + CmdCode + " CmdName = " + CmdName );
                         if ( CmdCode1 < 0 || CmdCode1 >= MenuMax ) break;
                         cd = CmdCode1;
                         goto MainCase13;
                        mode = 2;
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        break;
                    case 6:
                        break;
                    case 7:
                        break;
                    case 8:
                        mode = 2;
                        break;
                    case 9:
                        break;
                    default:
                        break;
                }
                 break;
MainCase12:     case 12:
                fomat = ( short )( cd - 1 );
                if ( cd >= 10 ) fomat = ( short )( cd - 11 );
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                        if ( DataLoad( os, fomat ) < 0 ) { mode = 0return; }
                        mode = 2;
                        break;
                    case 5:
                        mode = 0;
                        break;
                    case 10:
                        break;
                    case 11:
                    case 12:
                    case 13:
                    case 14:
                        if ( DataSave( os, fomat ) < 0 ) { mode = 3return; }
                        mode = 2;
                        break;
                    case 15:
                        mode = 0;
                        break;
                    default:
                        break;
                }
                 break;
MainCase13:     case 13:
                switch ( cd )
                {
                    case 0:
                        break;
                    case 1:
                        HelpFormOpen( cd );
                        mode = 11;
                        break;
                    case 2:
                        HelpFormOpen( cd );
                        mode = 11;
                        break;
                    case 3:
                        mode = 2;
                        break;
                    case 4:
                        mode = 2;
                        break;
                    case 5:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase14:     case 14:
                 mode = 6;        // 特殊図形 : 定義
                switch ( cd )
                {
                    case 0:            // 取り消し
                        break;
                    case 1:            // 表題欄
                        FramePast( cd );
                        break;
                    case 2:            // 部品欄
                        FramePast( cd );
                        break;
                    case 3:            // 配布欄
                        FramePast( cd );
                        break;
                    case 4:
                        GraphicDraw( );
                        break;
                    case 5:
                        DataPlotDraw( );
                        break;
                    case 6:
                        PicturePast1( );
                        break;
                    case 7:
                        Seg1Past( );
                        break;
                    case 8:
                        Seg2Past( );
                        break;
                    case 9:
                        Seg3Past( );
                        break;
                    case 10:        // 戻る
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase15:     case 15:
                switch ( cd )
                {
                    case 0:            // 取り消し
                        break;
                    case 1:            // 表題欄
                        FrameDraw( os, cd );
                        break;
                    case 2:            // 部品欄
                        FrameDraw( os, cd );
                        break;
                    case 3:            // 配布欄
                        FrameDraw( os, cd );
                        break;
                    case 4:            // 部品欄
                        Seg1Draw( os, cd - 3 );
                        break;
                    case 5:            // 配布欄
                        Seg2Draw( os, cd - 3 );
                        break;
                    case 6:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase16:     case 16:
                switch ( cd )
                {
                    case 0:            // 取り消し
                        break;
                    case 1:    
                        FilePrint( os );
                        break;
                    case 2:    
                        FileChg( os );
                        break;
                    case 3:    
                        FileChg1( os );
                        break;
                    case 4:
                        WiringChg( os );;
                        break;
                    case 5:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
MainCase17:     case 17:
                switch ( cd )
                {
                    case 0:            // 取り消し
                        break;
                    case 1:    
                        WiringExec( os );
                        break;
                    case 2:    
                        UserExec1( os );
                        break;
                    case 3:    
                        UserExec2( os );
                        break;
                    case 4:
                        UserExec3( os );
                        break;
                    case 5:
                        mode = 2;
                        break;
                    default:
                        break;
                }
                 break;
             case 18:
                 break;
             case 19:
                 break;
             default:
                 break;
         }
    }